// 导入必要的 Vite 插件和模块
import vue from '@vitejs/plugin-vue';            // Vue 3 单文件组件支持
import { resolve } from 'path';                  // 路径解析工具
import { defineConfig, loadEnv, ConfigEnv } from 'vite'; // Vite 核心配置方法
import vueSetupExtend from 'vite-plugin-vue-setup-extend'; // 支持在 <script setup> 中使用 name 属性
import vueJsx from '@vitejs/plugin-vue-jsx'      // Vue JSX 语法支持

// 路径解析函数，简化绝对路径的生成
const pathResolve = (dir: string) => {
	return resolve(__dirname, '.', dir);
};

// 配置路径别名（方便模块导入）
const alias: Record<string, string> = {
	'/@': pathResolve('./src/'),                  // 项目根目录下的 src 目录
	'@views': pathResolve('./src/views'),         // 视图组件目录
	'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',  // 兼容 CommonJS 版本的 i18n
	'@dvaformflow': pathResolve('./src/viwes/plugins/dvaadmin_form_flow/src/') // 表单流程插件目录
};

// Vite 主配置函数
const viteConfig = defineConfig((mode: ConfigEnv) => {
	const env = loadEnv(mode.mode, process.cwd()); // 加载环境变量
	return {
		plugins: [
			vue(),       // 处理 *.vue 文件
			vueJsx(),    // 处理 JSX/TSX 语法（*.jsx/*.tsx）
			vueSetupExtend() // 处理 <script setup> 语法
		],
		root: process.cwd(),
		resolve: { alias },
		base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
		optimizeDeps: {
			include: ['element-plus/es/locale/lang/zh-cn', 'element-plus/es/locale/lang/en', 'element-plus/es/locale/lang/zh-tw'],
		},
		server: {
			host: '0.0.0.0',       // 允许所有网络访问
			port: env.VITE_PORT as unknown as number, // 从环境变量获取端口号
			open: true,            // 自动打开浏览器
			hmr: true,             // 开启热模块替换
			proxy: {               // API 代理配置
				'/gitee': {
					target: 'https://gitee.com', // 目标服务器
					ws: true,                   // 代理 WebSocket
					changeOrigin: true,         // 修改请求头 Origin
					rewrite: (path) => path.replace(/^\/gitee/, '') // 路径重写
				},
			},
		},
		build: {
			outDir: env.VITE_DIST_PATH || 'dist',
			chunkSizeWarningLimit: 1500,
			rollupOptions: {
				output: {
					entryFileNames: `assets/[name].[hash].js`,
					chunkFileNames: `assets/[name].[hash].js`,
					assetFileNames: `assets/[name].[hash].[ext]`,
					compact: true,
					manualChunks: {
						vue: ['vue', 'vue-router', 'pinia'],
						echarts: ['echarts'],
					},
				},
			},
		},
		css: {
			preprocessorOptions: {
				scss: {
					api: 'modern' // 使用现代模式编译 SCSS
				},
			},
		},
		define: {
			// 配置 Vue I18n 的兼容性选项
			__VUE_I18N_LEGACY_API__: JSON.stringify(false),     // 禁用旧版 API
			__VUE_I18N_FULL_INSTALL__: JSON.stringify(false),   // 最小化安装
			__INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false),   // 生产环境禁用 devtools
			__VERSION__: JSON.stringify(process.env.npm_package_version) // 注入项目版本号
		},
	};
});

export default viteConfig;
